// 定制请求的实例
// 导入axios  npm install axios
import axios from 'axios';

import { ElMessage } from 'element-plus';
// 定义一个变量,记录公共的前缀, baseURL
// const baseURL = 'http://localhost:8080';
const baseURL = '/api';
const instance = axios.create({baseURL})

import { useTokenStore } from '@/stores/token.js';

// 添加请求拦截器
instance.interceptors.request.use(
    (config) => {
        // 请求前的回调
        const tokenStore = useTokenStore();
        // 判断是有没有token
        if(tokenStore.token){
            config.headers.Authorization = tokenStore.token
        }
        return config
    },
    (err)=>{
        // 请求错误的回调
        Promise.reject(err)
    }
)

import router from '@/router';
// 防止重复弹出警告
let warningShown = false;
const warningTimeout = 5000; // 5秒内不重复显示警告
// 添加响应拦截器
instance.interceptors.response.use(
    result=>{
        // 判断业务状态码
        if(result.data.code === 0){
            //成功
            return result.data
        }
        //失败
        ElMessage.error(result.data.message?result.data.message:'服务异常');
        return Promise.reject(result.data);// 异步的状态转化成失败的状态
    },
    err=>{
        if(err.response.status===401){
            // 未登录
            if (!warningShown) {
                ElMessage.warning('登录超时，请重新登录');
                // 防止重复弹出警告
                warningShown = true;
                // 5秒内不重复显示警告
                setTimeout(() => {
                    warningShown = false;
                }, warningTimeout);
            }
            router.push('/login')
        }else{
            ElMessage.error('服务异常');
        }
        return Promise.reject(err);// 异步的状态转化成失败的状态
    }
)

export default instance;